/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2021-10-17
 * Time: 21:02
 */
import java.util.Arrays;
public class MyArrayList {
    private int[] elem;
    private int usedSize;

    public MyArrayList() {
        this.elem = new int[5];
    }

    public MyArrayList(int capacity) {
        this.elem = new int[capacity];
    }

    public boolean isFull() {
        if (this.usedSize == this.elem.length) {
            return true;
        }
        return false;
    }


    //打印顺序表
    public void dispaly() {
        for (int i = 0; i < this.elem.length; i++) {
            System.out.print(this.elem[i] + " ");
        }
        System.out.println();
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        if (isFull()) {
            System.out.println("顺序表已满");
            return;
        }
        if (pos < 0 || pos > this.usedSize) {
            System.out.println("pos位置不合法");
            return;
        }
        for (int i = this.usedSize - 1; i >= pos; i--) {
            this.elem[i + 1] = this.elem[i];
        }
        this.elem[pos] = data;
        this.usedSize++;
    }

    public void resize() {
        this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);
    }

    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if (this.elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }

    // 查找某个元素对应的位置
    public int search(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if (this.elem[i] == toFind) {
                return i;
            }
        }
        return -1;
    }

    // 获取 pos 位置的元素
    public int getPos(int pos) {
        if (pos < 0 || pos >= this.usedSize) {
            return -1;
        }
        return -1;
    }

    // 给 pos 位置的元素设为 value
    public void setPos(int pos, int value) {
        if (pos < 0 || pos >= this.usedSize) {
            return;
        }
        this.elem[pos] = value;
    }

    //删除第一次出现的关键字key
    public void remove(int key) {
        int index = search(key);
        if (index == -1) {
            System.out.println("没有");
            return;
        }
        for (int i = index; i < this.usedSize - 1; i++) {
            this.elem[i] = this.elem[i + 1];
        }
        this.usedSize--;
    }

    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }

    // 清空顺序表
    public void clear() {
        this.usedSize = 0;
    }

    public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        MyArrayList myArrayList1 = new MyArrayList(20);
        myArrayList.add(0, 1);
        myArrayList.add(1, 2);
        myArrayList.add(2, 3);
        myArrayList.add(3, 4);
        myArrayList.add(6, 3);//测试不合法位置
        myArrayList.add(4, 5);
        myArrayList.add(5, 6);//表满
        myArrayList.dispaly();
        System.out.println(myArrayList.search(4));//下标3
        System.out.println(myArrayList.search(6));//无 -1
        System.out.println(myArrayList.contains(6));//无 应为false
        System.out.println(myArrayList.contains(2));//有 为true
        myArrayList.setPos(2, 5);
        myArrayList.dispaly();
        myArrayList.remove(5);
        myArrayList.dispaly();
        System.out.println(myArrayList.size());
        System.out.println(myArrayList.getPos(4));
        myArrayList.resize();
        myArrayList.dispaly();
    }
}
